package com.fs.erp.api.basedata.controller;

import com.fs.erp.api.basedata.bo.product.peoperty.QueryProductPropertyBo;
import com.fs.erp.api.basedata.entity.ProductCategory;
import com.fs.erp.api.basedata.entity.ProductProperty;
import com.fs.erp.api.basedata.service.ProductPropertyService;
import com.fs.erp.api.basedata.vo.product.UpdateProductPropertVo;
import com.fs.erp.api.basedata.vo.product.category.UpdateProductCategoryVo;
import com.fs.erp.api.basedata.vo.storecenter.QueryProductPropertyVo;
import com.fs.erp.common.utils.CollectionUtil;
import com.fs.erp.mybatis.resp.PageResult;
import com.fs.erp.mybatis.utils.PageResultUtil;
import com.fs.erp.web.controller.DefaultBaseController;
import com.fs.erp.web.resp.InvokeResult;
import com.fs.erp.web.resp.InvokeResultBuilder;
import com.fs.erp.web.resp.InvokeResultBuilderWrapper;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import javax.validation.Valid;
import java.util.List;
import java.util.stream.Collectors;

/**
 * 属性管理
 */
@RestController
@RequestMapping("/basedata/product/property")
public class ProductPropertyController extends DefaultBaseController {
    @Autowired
    private ProductPropertyService productPropertyService;

    @GetMapping("/query")
    public InvokeResult<PageResult<QueryProductPropertyBo>> query(@Valid QueryProductPropertyVo vo){
        PageResult<ProductProperty> pageResult=productPropertyService.query(getPageIndex(vo),getPageSize(vo),vo);
        List<ProductProperty> properties=pageResult.getDatas();
        List<QueryProductPropertyBo> bos=null;

        if (!CollectionUtil.isEmpty(properties)){
            bos=properties.stream().map(QueryProductPropertyBo::new).collect(Collectors.toList());
        }
        return InvokeResultBuilder.success(PageResultUtil.rebuild(pageResult,bos));
    }

//    @GetMapping("/{id}")
//    public InvokeResult<UpdateProductPropertVo> getInfo(@PathVariable(value = "id",required = false) String id){
//        ProductProperty property=productPropertyService.getById(id);
//        UpdateProductPropertVo categoryVo= new UpdateProductPropertVo(property);
//        categoryVo.setId(id);
//        return InvokeResultBuilder.success(categoryVo);
//    }

    /**
     * 修改
     * @param vo
     * @return
     */
    @PutMapping
    public InvokeResult<Void> update(@Valid UpdateProductPropertVo vo){
        productPropertyService.updateProperty(vo);

        //根据id清除缓存
        productPropertyService.cleanCacheByKey(vo.getId());

        return InvokeResultBuilder.success();
    }
    @GetMapping
    public  InvokeResult<QueryProductPropertyBo> getInfo(@RequestParam("id")String id){
        QueryProductPropertyBo queryProductPropertyBo=productPropertyService.seleteById(id);
        return InvokeResultBuilder.success(queryProductPropertyBo);
    }

}
